home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / dalla rivista / host contacted / jikes.lha / jikes-1.11 / src / dump.cpp < prev    next >
C/C++ Source or Header  |  1999-10-09  |  13KB  |  324 lines

  1. // $Id: dump.cpp,v 1.7 1999/10/09 16:34:07 shields Exp $
  2. //
  3. // This software is subject to the terms of the IBM Jikes Compiler
  4. // License Agreement available at the following URL:
  5. // http://www.ibm.com/research/jikes.
  6. // Copyright (C) 1996, 1998, International Business Machines Corporation
  7. // and others.  All Rights Reserved.
  8. // You must accept the terms of that agreement to use this software.
  9. //
  10. #ifdef TEST
  11.  
  12. #include "config.h"
  13. #include "javasym.h"
  14. #include "control.h"
  15. #include "stream.h"
  16. #include <iostream.h>
  17. #include <stdio.h>
  18.  
  19. static char*
  20.       TK_notoken_STRING      = "TK_notoken",
  21.       TK_Identifier_STRING[] = "TK_Identifier",
  22.       TK_abstract_STRING[] = "TK_abstract",
  23.       TK_boolean_STRING[] = "TK_boolean",
  24.       TK_break_STRING[] = "TK_break",
  25.       TK_byte_STRING[] = "TK_byte",
  26.       TK_case_STRING[] = "TK_case",
  27.       TK_catch_STRING[] = "TK_catch",
  28.       TK_char_STRING[] = "TK_char",
  29.       TK_class_STRING[] = "TK_class",
  30.       TK_const_STRING[] = "TK_const",
  31.       TK_continue_STRING[] = "TK_continue",
  32.       TK_default_STRING[] = "TK_default",
  33.       TK_do_STRING[] = "TK_do",
  34.       TK_double_STRING[] = "TK_double",
  35.       TK_else_STRING[] = "TK_else",
  36.       TK_extends_STRING[] = "TK_extends",
  37.       TK_false_STRING[] = "TK_false",
  38.       TK_final_STRING[] = "TK_final",
  39.       TK_finally_STRING[] = "TK_finally",
  40.       TK_float_STRING[] = "TK_float",
  41.       TK_for_STRING[] = "TK_for",
  42.       TK_goto_STRING[] = "TK_goto",
  43.       TK_if_STRING[] = "TK_if",
  44.       TK_implements_STRING[] = "TK_implements",
  45.       TK_import_STRING[] = "TK_import",
  46.       TK_instanceof_STRING[] = "TK_instanceof",
  47.       TK_int_STRING[] = "TK_int",
  48.       TK_interface_STRING[] = "TK_interface",
  49.       TK_long_STRING[] = "TK_long",
  50.       TK_native_STRING[] = "TK_native",
  51.       TK_new_STRING[] = "TK_new",
  52.       TK_null_STRING[] = "TK_null",
  53.       TK_package_STRING[] = "TK_package",
  54.       TK_private_STRING[] = "TK_private",
  55.       TK_protected_STRING[] = "TK_protected",
  56.       TK_public_STRING[] = "TK_public",
  57.       TK_return_STRING[] = "TK_return",
  58.       TK_short_STRING[] = "TK_short",
  59.       TK_static_STRING[] = "TK_static",
  60.       TK_super_STRING[] = "TK_super",
  61.       TK_switch_STRING[] = "TK_switch",
  62.       TK_synchronized_STRING[] = "TK_synchronized",
  63.       TK_this_STRING[] = "TK_this",
  64.       TK_throw_STRING[] = "TK_throw",
  65.       TK_throws_STRING[] = "TK_throws",
  66.       TK_transient_STRING[] = "TK_transient",
  67.       TK_true_STRING[] = "TK_true",
  68.       TK_try_STRING[] = "TK_try",
  69.       TK_void_STRING[] = "TK_void",
  70.       TK_volatile_STRING[] = "TK_volatile",
  71.       TK_while_STRING[] = "TK_while",
  72.       TK_IntegerLiteral_STRING[] = "TK_IntegerLiteral",
  73.       TK_LongLiteral_STRING[] = "TK_LongLiteral",
  74.       TK_FloatingPointLiteral_STRING[] = "TK_FloatingPointLiteral",
  75.       TK_DoubleLiteral_STRING[] = "TK_DoubleLiteral",
  76.       TK_CharacterLiteral_STRING[] = "TK_CharacterLiteral",
  77.       TK_StringLiteral_STRING[] = "TK_StringLiteral",
  78.       TK_PLUS_PLUS_STRING[] = "TK_PLUS_PLUS",
  79.       TK_MINUS_MINUS_STRING[] = "TK_MINUS_MINUS",
  80.       TK_EQUAL_EQUAL_STRING[] = "TK_EQUAL_EQUAL",
  81.       TK_LESS_EQUAL_STRING[] = "TK_LESS_EQUAL",
  82.       TK_GREATER_EQUAL_STRING[] = "TK_GREATER_EQUAL",
  83.       TK_NOT_EQUAL_STRING[] = "TK_NOT_EQUAL",
  84.       TK_LEFT_SHIFT_STRING[] = "TK_LEFT_SHIFT",
  85.       TK_RIGHT_SHIFT_STRING[] = "TK_RIGHT_SHIFT",
  86.       TK_UNSIGNED_RIGHT_SHIFT_STRING[] = "TK_UNSIGNED_RIGHT_SHIFT",
  87.       TK_PLUS_EQUAL_STRING[] = "TK_PLUS_EQUAL",
  88.       TK_MINUS_EQUAL_STRING[] = "TK_MINUS_EQUAL",
  89.       TK_MULTIPLY_EQUAL_STRING[] = "TK_MULTIPLY_EQUAL",
  90.       TK_DIVIDE_EQUAL_STRING[] = "TK_DIVIDE_EQUAL",
  91.       TK_AND_EQUAL_STRING[] = "TK_AND_EQUAL",
  92.       TK_OR_EQUAL_STRING[] = "TK_OR_EQUAL",
  93.       TK_XOR_EQUAL_STRING[] = "TK_XOR_EQUAL",
  94.       TK_REMAINDER_EQUAL_STRING[] = "TK_REMAINDER_EQUAL",
  95.       TK_LEFT_SHIFT_EQUAL_STRING[] = "TK_LEFT_SHIFT_EQUAL",
  96.       TK_RIGHT_SHIFT_EQUAL_STRING[] = "TK_RIGHT_SHIFT_EQUAL",
  97.       TK_UNSIGNED_RIGHT_SHIFT_EQUAL_STRING[] = "TK_UNSIGNED_RIGHT_SHIFT_EQUAL",
  98.       TK_OR_OR_STRING[] = "TK_OR_OR",
  99.       TK_AND_AND_STRING[] = "TK_AND_AND",
  100.       TK_PLUS_STRING[] = "TK_PLUS",
  101.       TK_MINUS_STRING[] = "TK_MINUS",
  102.       TK_NOT_STRING[] = "TK_NOT",
  103.       TK_REMAINDER_STRING[] = "TK_REMAINDER",
  104.       TK_XOR_STRING[] = "TK_XOR",
  105.       TK_AND_STRING[] = "TK_AND",
  106.       TK_MULTIPLY_STRING[] = "TK_MULTIPLY",
  107.       TK_OR_STRING[] = "TK_OR",
  108.       TK_TWIDDLE_STRING[] = "TK_TWIDDLE",
  109.       TK_DIVIDE_STRING[] = "TK_DIVIDE",
  110.       TK_GREATER_STRING[] = "TK_GREATER",
  111.       TK_LESS_STRING[] = "TK_LESS",
  112.       TK_LPAREN_STRING[] = "TK_LPAREN",
  113.       TK_RPAREN_STRING[] = "TK_RPAREN",
  114.       TK_LBRACE_STRING[] = "TK_LBRACE",
  115.       TK_RBRACE_STRING[] = "TK_RBRACE",
  116.       TK_LBRACKET_STRING[] = "TK_LBRACKET",
  117.       TK_RBRACKET_STRING[] = "TK_RBRACKET",
  118.       TK_SEMICOLON_STRING[] = "TK_SEMICOLON",
  119.       TK_QUESTION_STRING[] = "TK_QUESTION",
  120.       TK_COLON_STRING[] = "TK_COLON",
  121.       TK_COMMA_STRING[] = "TK_COMMA",
  122.       TK_DOT_STRING[] = "TK_DOT",
  123.       TK_EQUAL_STRING[] = "TK_EQUAL",
  124.       TK_ERROR_STRING[] = "TK_ERROR",
  125.       TK_EOF_STRING[] = "TK_EOF",
  126.       TK_EOL_STRING[] = "TK_EOL";
  127.  
  128. static char *token_type(unsigned char kind)
  129. {
  130.     switch(kind)
  131.     {
  132.     case TK_Identifier: return TK_Identifier_STRING;
  133.     case TK_abstract: return TK_abstract_STRING;
  134.     case TK_boolean: return TK_boolean_STRING;
  135.     case TK_break: return TK_break_STRING;
  136.     case TK_byte: return TK_byte_STRING;
  137.     case TK_case: return TK_case_STRING;
  138.     case TK_catch: return TK_catch_STRING;
  139.     case TK_char: return TK_char_STRING;
  140.     case TK_class: return TK_class_STRING;
  141.     case TK_const: return TK_const_STRING;
  142.     case TK_continue: return TK_continue_STRING;
  143.     case TK_default: return TK_default_STRING;
  144.     case TK_do: return TK_do_STRING;
  145.     case TK_double: return TK_double_STRING;
  146.     case TK_else: return TK_else_STRING;
  147.     case TK_extends: return TK_extends_STRING;
  148.     case TK_false: return TK_false_STRING;
  149.     case TK_final: return TK_final_STRING;
  150.     case TK_finally: return TK_finally_STRING;
  151.     case TK_float: return TK_float_STRING;
  152.     case TK_for: return TK_for_STRING;
  153.     case TK_goto: return TK_goto_STRING;
  154.     case TK_if: return TK_if_STRING;
  155.     case TK_implements: return TK_implements_STRING;
  156.     case TK_import: return TK_import_STRING;
  157.     case TK_instanceof: return TK_instanceof_STRING;
  158.     case TK_int: return TK_int_STRING;
  159.     case TK_interface: return TK_interface_STRING;
  160.     case TK_long: return TK_long_STRING;
  161.     case TK_native: return TK_native_STRING;
  162.     case TK_new: return TK_new_STRING;
  163.     case TK_null: return TK_null_STRING;
  164.     case TK_package: return TK_package_STRING;
  165.     case TK_private: return TK_private_STRING;
  166.     case TK_protected: return TK_protected_STRING;
  167.     case TK_public: return TK_public_STRING;
  168.     case TK_return: return TK_return_STRING;
  169.     case TK_short: return TK_short_STRING;
  170.     case TK_static: return TK_static_STRING;
  171.     case TK_super: return TK_super_STRING;
  172.     case TK_switch: return TK_switch_STRING;
  173.     case TK_synchronized: return TK_synchronized_STRING;
  174.     case TK_this: return TK_this_STRING;
  175.     case TK_throw: return TK_throw_STRING;
  176.     case TK_throws: return TK_throws_STRING;
  177.     case TK_transient: return TK_transient_STRING;
  178.     case TK_true: return TK_true_STRING;
  179.     case TK_try: return TK_try_STRING;
  180.     case TK_void: return TK_void_STRING;
  181.     case TK_volatile: return TK_volatile_STRING;
  182.     case TK_while: return TK_while_STRING;
  183.     case TK_IntegerLiteral: return TK_IntegerLiteral_STRING;
  184.     case TK_LongLiteral: return TK_LongLiteral_STRING;
  185.     case TK_FloatingPointLiteral: return TK_FloatingPointLiteral_STRING;
  186.     case TK_DoubleLiteral: return TK_DoubleLiteral_STRING;
  187.     case TK_CharacterLiteral: return TK_CharacterLiteral_STRING;
  188.     case TK_StringLiteral: return TK_StringLiteral_STRING;
  189.     case TK_PLUS_PLUS: return TK_PLUS_PLUS_STRING;
  190.     case TK_MINUS_MINUS: return TK_MINUS_MINUS_STRING;
  191.     case TK_EQUAL_EQUAL: return TK_EQUAL_EQUAL_STRING;
  192.     case TK_LESS_EQUAL: return TK_LESS_EQUAL_STRING;
  193.     case TK_GREATER_EQUAL: return TK_GREATER_EQUAL_STRING;
  194.     case TK_NOT_EQUAL: return TK_NOT_EQUAL_STRING;
  195.     case TK_LEFT_SHIFT: return TK_LEFT_SHIFT_STRING;
  196.     case TK_RIGHT_SHIFT: return TK_RIGHT_SHIFT_STRING;
  197.     case TK_UNSIGNED_RIGHT_SHIFT: return TK_UNSIGNED_RIGHT_SHIFT_STRING;
  198.     case TK_PLUS_EQUAL: return TK_PLUS_EQUAL_STRING;
  199.     case TK_MINUS_EQUAL: return TK_MINUS_EQUAL_STRING;
  200.     case TK_MULTIPLY_EQUAL: return TK_MULTIPLY_EQUAL_STRING;
  201.     case TK_DIVIDE_EQUAL: return TK_DIVIDE_EQUAL_STRING;
  202.     case TK_AND_EQUAL: return TK_AND_EQUAL_STRING;
  203.     case TK_OR_EQUAL: return TK_OR_EQUAL_STRING;
  204.     case TK_XOR_EQUAL: return TK_XOR_EQUAL_STRING;
  205.     case TK_REMAINDER_EQUAL: return TK_REMAINDER_EQUAL_STRING;
  206.     case TK_LEFT_SHIFT_EQUAL: return TK_LEFT_SHIFT_EQUAL_STRING;
  207.     case TK_RIGHT_SHIFT_EQUAL: return TK_RIGHT_SHIFT_EQUAL_STRING;
  208.     case TK_UNSIGNED_RIGHT_SHIFT_EQUAL: return TK_UNSIGNED_RIGHT_SHIFT_EQUAL_STRING;
  209.     case TK_OR_OR: return TK_OR_OR_STRING;
  210.     case TK_AND_AND: return TK_AND_AND_STRING;
  211.     case TK_PLUS: return TK_PLUS_STRING;
  212.     case TK_MINUS: return TK_MINUS_STRING;
  213.     case TK_NOT: return TK_NOT_STRING;
  214.     case TK_REMAINDER: return TK_REMAINDER_STRING;
  215.     case TK_XOR: return TK_XOR_STRING;
  216.     case TK_AND: return TK_AND_STRING;
  217.     case TK_MULTIPLY: return TK_MULTIPLY_STRING;
  218.     case TK_OR: return TK_OR_STRING;
  219.     case TK_TWIDDLE: return TK_TWIDDLE_STRING;
  220.     case TK_DIVIDE: return TK_DIVIDE_STRING;
  221.     case TK_GREATER: return TK_GREATER_STRING;
  222.     case TK_LESS: return TK_LESS_STRING;
  223.     case TK_LPAREN: return TK_LPAREN_STRING;
  224.     case TK_RPAREN: return TK_RPAREN_STRING;
  225.     case TK_LBRACE: return TK_LBRACE_STRING;
  226.     case TK_RBRACE: return TK_RBRACE_STRING;
  227.     case TK_LBRACKET: return TK_LBRACKET_STRING;
  228.     case TK_RBRACKET: return TK_RBRACKET_STRING;
  229.     case TK_SEMICOLON: return TK_SEMICOLON_STRING;
  230.     case TK_QUESTION: return TK_QUESTION_STRING;
  231.     case TK_COLON: return TK_COLON_STRING;
  232.     case TK_COMMA: return TK_COMMA_STRING;
  233.     case TK_DOT: return TK_DOT_STRING;
  234.     case TK_EQUAL: return TK_EQUAL_STRING;
  235.     case TK_ERROR: return TK_ERROR_STRING;
  236.     case TK_EOF: return TK_EOF_STRING;
  237.     case TK_EOL: return TK_EOL_STRING;
  238.     default:            return TK_notoken_STRING;
  239.     }
  240. }
  241.  
  242. void LexStream::Dump()
  243. {
  244.     FILE *tokfile;
  245.     char *tokfile_name = new char[FileNameLength() + 5]; // +1 for '\0' +4 for length(".tok")
  246.     strcpy(tokfile_name, FileName());
  247.     strcat(tokfile_name, StringConstant::U8S__DO_tok);
  248.  
  249.     if ((tokfile = ::SystemFopen(tokfile_name, "w")) == NULL)
  250.     {
  251.         Coutput << "*** Cannot open file " << tokfile_name << "\n";
  252.         return;
  253.     }
  254.  
  255.     RereadInput();
  256.  
  257.     SetUpComments();
  258.  
  259.     LexStream::TokenIndex tok = 0;
  260.     for (LexStream::CommentIndex com = FirstComment(tok); com < NumComments() && PrecedingToken(com) == tok; com++)
  261.     {
  262.         fprintf(tokfile, "*%5d ", com);
  263.         // print file name
  264.         fprintf(tokfile, "%s",FileName());
  265.         fprintf(tokfile, ", line %d.%d: ",
  266.                          FindLine(comments[com].location),
  267.                          FindColumn(comments[com].location));
  268.         for (wchar_t *s = CommentString(com); *s != U_NULL; s++)
  269.             fprintf(tokfile, "%c", *s);
  270.         fprintf(tokfile, "\n");
  271.     }
  272.  
  273.     do
  274.     {
  275.         tok = Gettoken();
  276.  
  277.         fprintf(tokfile, "%6d ", tok);
  278.         fprintf(tokfile, " %s",FileName());
  279.         fprintf(tokfile, ", %cline %d.%d: %s %s  ",
  280.                          (AfterEol(tok) ? '*' : ' '),
  281.                          Line(tok),
  282.                          Column(tok),
  283.                          token_type(Kind(tok)),
  284.                          (IsDeprecated(Previous(tok)) ? "(d)" : " "));
  285.         for (wchar_t *s = NameString(tok); *s != U_NULL; s++)
  286.             fprintf(tokfile, "%c", *s);
  287.         fprintf(tokfile, "\n");
  288.  
  289.         for (LexStream::CommentIndex com = FirstComment(tok); com < NumComments() && PrecedingToken(com) == tok; com++)
  290.         {
  291.             fprintf(tokfile, "*%5d ",com);
  292.         fprintf(tokfile, " %s",FileName());
  293.             fprintf(tokfile, ", line %d.%d: ",
  294.                              FindLine(comments[com].location),
  295.                              FindColumn(comments[com].location));
  296.             for (wchar_t *s = CommentString(com); *s != U_NULL; s++)
  297.             fprintf(tokfile, "%c", *s);
  298.             fprintf(tokfile, "\n");
  299.         }
  300.     } while (Kind(tok) != TK_EOF);
  301.  
  302.     DestroyInput();
  303.     fprintf(tokfile, "\n");
  304. #ifdef UNIQUE_NAMES
  305.     fprintf(tokfile, "\nThe unique names are:\n\n");
  306.     for (int i = 0; i < control.name_table.symbol_pool.length(); i++)
  307.     {
  308.         fprintf(tokfile, "%4d ", i);
  309.         for (wchar_t *s = control.name_table.symbol_pool[i].name(); *s != U_NULL; s++)
  310.             fprintf(tokfile, "%c", *s);
  311.         fprintf(tokfile, "\n");
  312.     }
  313. #endif
  314.  
  315.     if (tokfile)
  316.         fclose(tokfile);
  317.  
  318.     delete [] tokfile_name;
  319.  
  320.     return;
  321. }
  322.  
  323. #endif
  324.